home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / c-part1 / 6381 < prev    next >
Encoding:
Text File  |  1996-08-05  |  1.6 KB  |  70 lines

  1. Path: news.cencom.net!ns!tanp
  2. From: tanp@ns (Bill Wendling)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: Why does this work?
  5. Date: 21 Feb 1996 07:02:53 GMT
  6. Organization: Cen-Com Internet
  7. Message-ID: <4geg2t$k3f@news.cencom.net>
  8. References: <4g8f7o$adt@ncar.ucar.edu>
  9. NNTP-Posting-Host: ns.cencom.net
  10. X-Newsreader: TIN [version 1.2 PL2]
  11.  
  12. Jim Rosinski inexplicably wrote:
  13.  
  14. } Could someone please explain why the following code works?  In particular, I
  15. } am perplexed as to why "sub1" and "sub2" declared as elements of "cmndtable"
  16. } are valid "pointers to function returning void" (i.e. see the definition of
  17. } "cmndstruct").  When executed, the net result is indeed to invoke two
  18. } functions, "sub1", and "sub2" (tested on Solaris, AIX, and UNICOS).
  19.  
  20. } #include <stdio.h>
  21. } main()
  22. } {
  23. }   void sub1(), sub2();
  24.  
  25. }   struct cmndstruct {
  26. }     void (*funcnam)();
  27. }   };
  28.  
  29. }   struct cmndstruct cmndtable[] = {
  30. }     sub1,
  31. }     sub2,
  32. }     NULL
  33. }   };
  34. /*
  35. sub1 and sub2 are the reference to the functions that they call.  This has
  36. the same effect of doing:
  37.  
  38. void sub1();
  39. void (*funcnam)();
  40.  
  41. funcnam = sub1;
  42.  
  43. This is exactly how you assign a function to a function pointer.
  44.  
  45. */
  46.  
  47. }   struct cmndstruct *cmndptr;
  48.  
  49. }   for (cmndptr = cmndtable; *(cmndptr->funcnam) != NULL; cmndptr++) {
  50. }     (*(cmndptr->funcnam))();
  51. }   }
  52. }   exit(0);
  53. } }
  54.  
  55. } void sub1()
  56. } {
  57. }   printf("Inside sub1\n");
  58. } }
  59.  
  60. } void sub2()
  61. } {
  62. }   printf("Inside sub2\n");
  63. } }
  64.  
  65.  
  66. --
  67. Bill Wendling         | "Pinky, are you thinking what I'm thinking?"
  68. tanp@ns.cencom.net  | "I think so, Brain, but burlap chafes me so."
  69. "Boom Shanka"       | Finger me for my Geek Code...NOW!
  70.